package com.ziytek.web.citizen.model.req;

import com.ziytek.web.citizen.configuration.db.DynamicMax;
import com.ziytek.web.citizen.model.bean.AddSettings;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.util.List;

/**
 * 充、放电工艺方案修改接口请求参数
 * @author fenghx
 * @version v1.0
 * @className StepSettingsAddReq
 * @descripton 工步配置新增
 * @date 2023/4/28 13:31
 **/
@Data
public class StepSettingsModifyReq {
    /**
     * 用户token
     */
    private String token;

    /**
     * 修改方案主键ID
     */
    @NotBlank(message = "修改方案主键ID不能为空")
    private String id;

    /**
     * 修改方案编号
     */
    @NotBlank(message = "修改方案编号不能为空")
    private String planNo;

    /**
     * 修改方案名称
     */
    @NotBlank(message = "修改方案名称不能为空")
    private String planName;

    /**
     * 保护参数设置 充电电流上限
     */
    @NotNull(message = "充电电流上限不能为空")
    @DynamicMax(configKey = "chargeCurrentLimitMax", message = "充电电流上限不能超过配置的最大值")
    private Integer chargeCurrentLimit;

    /**
     * 保护参数设置 充电电压电压上限
     */
    @NotNull(message = "充电电压上限不能为空")
    @DynamicMax(configKey = "chargeVoltageLimitMax", message = "充电电压上限不能超过配置的最大值")
    private Integer chargeVoltageLimit;

    /**
     * 保护参数设置 放电电流下限
     */
    private Integer disChargeCurrentLimit;

    /**
     * 保护参数设置 放电电压下限
     */
    private Integer disChargeVoltageLimit;

    /**
     * 保护参数设置 开路电压(预留)
     */
    private Integer openCircuitVoltageLimit1;

    /**
     * 保护参数设置 开路电压(预留)
     */
    private Integer openCircuitVoltageLimit2;

    /**
     * 操作人
     */
    private String operatorId;

    /**
     * 操作时间
     */
    private String operatorTime;

    /**
     * 工步参数列表 详情参考“充放电参数设置.JPG”
     */
    @NotEmpty(message = "工步参数列表不能为空")
    private List<AddSettings> settingList;

    /**
     * 工步是否进行循环及循环次数 0-不循环 1-循环1次 2-循环2次 N-循环N次 默认0不循环
     */
    @NotNull(message = "工步是否进行循环及循环次数不能为空")
    private Integer isLoop;

    /**
     * 工步循环开始工步序号
     */
    private Integer loopOrderBegin;

    /**
     * 工步循环结束工步序号
     */
    private Integer loopOrderEnd;
}
